package com.shareyi.baseproject.kernel.common.spi.lock;

import java.util.List;

/**
 * redisLock执行器
 *
 * @author zhangshibin
 * @date 2019/1/23
 */
public interface DistributedLockExecutor {

    /**
     * 执行操作
     *
     * @param lockKey
     * @param timeoutMSec         超时时间，毫秒
     * @param lockExecuteTemplate
     * @param <T>
     * @return
     */
    <T> T execute(String lockKey, long timeoutMSec, LockExecuteTemplate<T> lockExecuteTemplate);

    /**
     * 批量执行操作，锁定为多个key
     *
     * @param lockKeyList         列表
     * @param timeoutMSec         超时时间，毫秒
     * @param lockExecuteTemplate
     * @param <T>
     * @return
     */
    <T> T executeBatch(List<String> lockKeyList, long timeoutMSec, LockExecuteTemplate<T> lockExecuteTemplate);
}
